﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using estudent.Models;
using System.Data.Objects.SqlClient;

namespace estudent.Controllers
{
    public class IzvajalciController : Controller
    {
        estudentEnt db = new estudentEnt();

        public ActionResult Index()
        {
            var profesorji = db.SProfesorjis
                .OrderBy(p => p.priimekProfesor)
                .ThenBy(p => p.imeProfesor)
                .Select(p => new SelectListItem
                {
                    Value = SqlFunctions.StringConvert(p.sProfesor).Trim(),
                    Text = p.priimekProfesor + " " + p.imeProfesor + " - " + SqlFunctions.StringConvert(p.sProfesor).Trim()
                });

            ViewData["profesorji"] = profesorji;

            var predmeti = db.sPredmetis
                .OrderBy(p => p.imePredmeta)
                .Select(p => new SelectListItem
                {
                    Value = SqlFunctions.StringConvert(p.sPredmeta).Trim(),
                    Text = p.imePredmeta + " - " + SqlFunctions.StringConvert(p.sPredmeta).Trim()
                });

            ViewData["predmeti"] = predmeti;

            return View("Izvajalci");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Vnesi(FormCollection form)
        {
            string izvaj = form["desni"];
            string predmet = form["predmet"];
            string[] izva = izvaj.Split(',');
            Array.Sort(izva);
            int prof1;
            int? prof2, prof3;
            prof1 = Int32.Parse(izva[0]);
            int pred = Int32.Parse(predmet);

            try
            {
                prof2 = Int32.Parse(izva[1]);
            }
            catch
            {
                prof2 = null;
            }
            try
            {
                prof3 = Int32.Parse(izva[2]);
            }
            catch
            {
                prof3 = null;
            }

            Poucuje nov = new Poucuje
            {
                sPredmeta = pred,
                sProfesor1 = prof1,
                sProfesor2 = prof2,
                sProfesor3 = prof3
            };
            try
            {
                db.Poucujes.AddObject(nov);
                db.SaveChanges();
                ViewData["uspeh"] = true;
                ViewData["sporocilo"] = "Vnos uspešno opravljen!";
            }
            catch (Exception e)
            {
                ViewData["uspeh"] = false;
                ViewData["sporocilo"] = "Napaka v bazi! tehnične podrobnosti napake: " + e.InnerException.Message;
            }


            return View("Rezultat");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string Preveri(FormCollection form)
        {
            string izvaj = form["desni"];
            string izhod = "ok";
            string predmet = form["predmet"];
            string[] izva = izvaj.Split(',');
            Array.Sort(izva);
            int prof1;
            int? prof2, prof3;
            prof1 = Int32.Parse(izva[0]);
            int pred = Int32.Parse(predmet);

            try
            {
                prof2 = Int32.Parse(izva[1]);
            }
            catch
            {
                prof2 = null;
            }
            try
            {
                prof3 = Int32.Parse(izva[2]);
            }
            catch
            {
                prof3 = null;
            }

            if (prof2 != null)
            {
                if (prof3 != null)
                {
                    if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == prof2 && p.sProfesor3 == prof3))
                        izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
                }
                else
                {
                    if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == prof2 && p.sProfesor3 == null))
                        izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
                }
            }
            else
            {
                if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == null && p.sProfesor3 == null))
                    izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
            }


            return izhod;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string PokaziIzvajalce(FormCollection form)
        {
            string izhod;
            int predmet = Int32.Parse(form["predmet"]);

            izhod = "<tr><th>Akcije</th><th>Profesor 1</th><th>Profesor 2</th><th>Profesor 3</th><th>Veljavnost</th></tr>";
            var izvajalci = db.Poucujes
                .Where(p => p.sPredmeta == predmet)
                .OrderBy(p => p.SProfesorji1.priimekProfesor)
                .ThenBy(p => p.SProfesorji2.priimekProfesor)
                .ThenBy(p => p.SProfesorji.priimekProfesor)
                .Select(p => p);

            foreach (var item in izvajalci)
            {
                izhod += "<tr>";
                izhod += "<td><a id='" + item.idPoucuje + "' class='urejaj'>Uredi</a> | <a id='" + item.idPoucuje + "' class='veljavnost'>Spremeni veljavnost</a>";
                izhod += "<td>" + item.SProfesorji1.priimekProfesor + " " + item.SProfesorji1.imeProfesor + " - " + item.sProfesor1 + "</td>";
                if (item.sProfesor2 != null)
                    izhod += "<td>" + item.SProfesorji2.priimekProfesor + " " + item.SProfesorji2.imeProfesor + " - " + item.sProfesor2 + "</td>";
                else
                    izhod += "<td></td>";
                if (item.sProfesor3 != null)
                    izhod += "<td>" + item.SProfesorji.priimekProfesor + " " + item.SProfesorji.imeProfesor + " - " + item.sProfesor3 + "</td>";
                else
                    izhod += "<td></td>";
                if (item.veljavnost == null || item.veljavnost == true)
                    izhod += "<td></td>";
                else
                    izhod += "<td>Neveljaven</td>";
                izhod += "</tr>";
            }


            return izhod;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string PreveriUrejanje(FormCollection form)
        {
            int id = Int32.Parse(form["id"]);
            string izhod = "ok";

            if (db.IzpitniRokis.Any(p => p.idPoucuje == id))
                izhod = "Že obstajajo razpisani izpitni roki za ta predmet pri teh predavateljih zato ne morete spreminjati izvajalcev!";

            return izhod;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult VnesiUrejanje(FormCollection form)
        {
            string izvaj = form["desni2"];
            string[] izva = izvaj.Split(',');
            Array.Sort(izva);
            int prof1;
            int? prof2, prof3;
            int predmet = Int32.Parse(form["predmetUrej"]);
            prof1 = Int32.Parse(izva[0]);
            decimal id = Int32.Parse(form["id"]);
            Poucuje nov;

            var original = db.Poucujes
                    .Where(p => p.idPoucuje == id)
                    .First();
            try
            {
                prof2 = Int32.Parse(izva[1]);
            }
            catch
            {
                prof2 = null;
            }
            try
            {
                prof3 = Int32.Parse(izva[2]);
            }
            catch
            {
                prof3 = null;
            }

            // kreiranje urejenega
            if (prof2 != null)
            {
                if (prof3 != null)
                {
                    nov = new Poucuje
                    {
                        idPoucuje = id,
                        sPredmeta = predmet,
                        sProfesor1 = prof1,
                        sProfesor2 = prof2,
                        sProfesor3 = prof3
                    };
                }
                else
                {
                    nov = new Poucuje
                    {
                        idPoucuje = id,
                        sPredmeta = predmet,
                        sProfesor1 = prof1,
                        sProfesor2 = prof2
                    };
                }
            }
            else
            {
                nov = new Poucuje
                {
                    idPoucuje = id,
                    sPredmeta = predmet,
                    sProfesor1 = prof1
                };
            }

            try
            {
                db.ApplyCurrentValues(original.EntityKey.EntitySetName, nov);
                db.SaveChanges();

                ViewData["uspeh"] = true;
                ViewData["sporocilo"] = "Vnos uspešno opravljen!";
            }
            catch (Exception e)
            {
                ViewData["uspeh"] = false;
                ViewData["sporocilo"] = "Napaka v bazi! tehnične podrobnosti napake: " + e.InnerException.Message;
            }

            return View("Rezultat");
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string PreveriUrejIzvaj(FormCollection form)
        {
            string izvaj = form["desni2"];
            string izhod = "ok";
            string predmet = form["predmetUrej"];
            string[] izva = izvaj.Split(',');
            Array.Sort(izva);
            int prof1;
            int? prof2, prof3;
            prof1 = Int32.Parse(izva[0]);
            int pred = Int32.Parse(predmet);
            int id = Int32.Parse(form["id"]);

            try
            {
                prof2 = Int32.Parse(izva[1]);
            }
            catch
            {
                prof2 = null;
            }
            try
            {
                prof3 = Int32.Parse(izva[2]);
            }
            catch
            {
                prof3 = null;
            }

            if (prof2 != null)
            {
                if (prof3 != null)
                {
                    if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == prof2 && p.sProfesor3 == prof3 && p.idPoucuje != id))
                        izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
                }
                else
                {
                    if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == prof2 && p.sProfesor3 == null && p.idPoucuje != id))
                        izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
                }
            }
            else
            {
                if (db.Poucujes.Any(p => p.sPredmeta == pred && p.sProfesor1 == prof1 && p.sProfesor2 == null && p.sProfesor3 == null && p.idPoucuje != id))
                    izhod = "Obstaja že taka kombinacija izvajalcev za ta predmet!";
            }


            return izhod;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string Veljavnost(FormCollection form)
        {
            int id = Int32.Parse(form["id"]);
            string izhod = "ok";
            try
            {
                var orig = (from p in db.Poucujes
                            where p.idPoucuje == id
                            select p).First();
                var spremen = (from p in db.Poucujes
                               where p.idPoucuje == id
                               select p).First();

                if (orig.veljavnost != null)
                {
                    spremen.veljavnost = !orig.veljavnost;
                }
                else
                {
                    spremen.veljavnost = false;
                }

                db.ApplyCurrentValues(orig.EntityKey.EntitySetName, spremen);
                db.SaveChanges();

            }
            catch (Exception e)
            {
                izhod = "Prišlo je do napake v bazi! Tehnične podrobnosti: " + e.InnerException.Message;
            }

            return izhod;
        }

        public string IzvajajoUred(FormCollection form)
        {
            int id = Int32.Parse(form["id"]);
            string izhod = "Spreminjate izvajalce za predmet: ";

            var izvaj = db.Poucujes
                .Where(p => p.idPoucuje == id)
                .First();

            izhod += izvaj.sPredmeti.imePredmeta + ". ";
            izhod += "In trenutne izvajalce: " + izvaj.SProfesorji1.priimekProfesor + " " + izvaj.SProfesorji1.imeProfesor;
            if (izvaj.sProfesor2 != null)
                izhod += ", " + izvaj.SProfesorji2.priimekProfesor + " " + izvaj.SProfesorji2.imeProfesor;
            if (izvaj.sProfesor3 != null)
                izhod += ", " + izvaj.SProfesorji.priimekProfesor + " " + izvaj.SProfesorji.imeProfesor;

            return izhod;
        }

    }
}
